import { usePermissionStore } from '@/store';

/**
 * 判断角色是否满足 用于角色权限判断
 * @param el
 * @param binding
 */
const roleUtils = (el, binding) => {
    //获取pinia
    let permission = usePermissionStore();
    //获取指令传递过来的数据
    const { value } = binding;
    //获取pinia中的角色信息
    const roles = permission.roles;
    //判断指令是否传值，传递是是否是一个数组并且大于0的数组
    if (value && value instanceof Array && value.length > 0) {
        //some：检测数组中的元素是否满足指定条件 不改变原来数组 返回 true/false
        //传递页面传递过来的角色是包含在pinia中的角色
        let flag = roles.some((item) => {
            return value.includes(item);
        });
        //如果没有该角色
        if (!flag) {
            // 删除该元素
            if (el.parentNode) {
                el.parentNode.removeChild(el);
            } else {
                console.error('Element has no parent node:', el);
            }
        }
    } else {
        throw new Error(`请设置${value}对应角色标签`);
    }
};
/**
 * 判断权限是否满足 用于权限判断
 * @param el
 * @param binding
 */
const permsUtils = (el, binding) => {
    //获取pinia
    let permission = usePermissionStore();
    //获取指令传递过来的数据
    const { value } = binding;
    //获取pinia中的权限信息
    const perms = permission.perms;
    //判断值是否存在 是否属于数组 是否大于0
    if (value && value instanceof Array && value.length > 0) {
        //some：检测数组中的元素是否满足指定条件 不改变原来数组 返回 true/false
        //传递页面传递的权限是包含在pinia中的权限
        let flag = perms.some((item) => {
            return value.includes(item);
        });
        //如果没有该权限
        if (!flag) {
            // 删除该元素
            if (el.parentNode) {
                el.parentNode.removeChild(el);
            } else {
                console.error('Element has no parent node:', el);
            }
        }
    } else {
        throw new Error(`请设置${value}对应权限标签`);
    }
};
/**
 * 在main.ts中注册全局指令
 * //绑定指令
 * app.directive('hasRole', roleUtils);
 * app.directive('hasPerms', permsUtils);
 * //使用指令  v-has-perms v开头 大写转下划线
 * <t-button v-has-role="['admin']“ @click="insert">新增信息</t-button>
 * 使用举例
 * <t-button v-has-perms="['system:User:manage']“ @click="insert">新增信息</t-button>
 */
export { roleUtils, permsUtils };
